// 开发一个简单的node服务端代码

// http模块
const http = require("http");

// url模块,帮助我们解析数据
const url = require("url");

const querystring = require("querystring");

// // 创建一个服务实例   createServer  create创建  server服务
const app = http.createServer();

// node中是以事件的方式（异步)的方式来处理客户端的请求的

// request事件
// 每一次 客户端向服务端发送请求，都会触发app的request事件
// 就可以在对应的请求事件的回调函数中，进行请求处理
app.on("request",(req,res) =>{
    // 请求的数据会被node封装为一个对象的形式
    // console.log(req);

    // console.log(req.headers);// 请求报文中的基本信息  header 请求头部
    // console.log(req.method);// method 请求的方式
    console.log(req.url); // url 请求的地址（路径） 除去了主机名的部分

    // 获取GET请求带来的数据, GET请求的数据是放在url中的，所以需要对url进行解析
    // parse返回是一个对象，对象里面有一个query属性
    let {query} = url.parse(req.url,true);//url.parse解析url //true，会对query进行深度的解析


    // 解析post请求数据
    let data = "";
    // 把数据拼起来，post请求传输文件大，http一次携带的文件有限，所以会分片进行拼接
    // 每次有post请求数据发过来的时候都会触发data事件
    req.on("data",chunk => data += chunk);
    // 把数据解析出来
    // 所有的post事件都传完了之后就会触发end事件
    req.on("end",() =>{
        let obj = querystring.parse(data);
        console.log(obj);
        // console.log(querystring.parse(data));
        // 设置响应报文头部，状态码设
        // res.writeHead(200, {
        //     'Content-Type': 'text/html;charset=utf8'   // 告诉客户端 此次响应的数据类型是html，请用utf8的格式对信息进行编码，从而避免中文的乱码
        // })
        // res.end(`<h1>了解后端lalala，，，你的访问方式是${req.method},你想访问的路径是${req.url},你的past请求的参数是：${JSON.stringify(obj)}</h1>
    // ${req.url}`);
    })

    res.writeHead(200, {
        'Content-Type': 'text/html;charset=utf8'   // 告诉客户端 此次响应的数据类型是html，请用utf8的格式对信息进行编码，从而避免中文的乱码
    })

    // res 是node中提供的一个响应服务对象， 通过它其中方法 对客户端进行响应信息
    res.end(`<h1>了解后端lalala，，，你的访问方式是${req.method},你想访问的路径是${req.url},你的get请求的参数是：${JSON.stringify(query)}</h1>
    ${req.url}`);
})


// 把服务实例和某个端口号进行关联
// 服务实例，监听某个端口
// 端口号不要冲突了 不要使用已经被占用的端口号1-65535
app.listen(3005, () =>{
    console.log("服务已启动，监听3005端口")
});
